package com.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class MultiThreadExample {

    static {
        exec();
    }

    public static void main(String[] args) {
        new MultiThreadExample();
    }

    private static void exec(){
        // 创建一个固定大小的线程池，其中包含3个线程
        ExecutorService executorService = Executors.newFixedThreadPool(3);

        // 启动任务1
        executorService.execute(() -> {
            for (int i = 1; i <= 5; i++) {
                System.out.println("任务1 - 执行步骤 " + i);
            }
        });

        // 启动任务2
        executorService.execute(() -> {
            for (int i = 1; i <= 5; i++) {
                System.out.println("任务2 - 执行步骤 " + i);
            }
        });

        // 启动任务3
        executorService.execute(() -> {
            for (int i = 1; i <= 5; i++) {
                System.out.println("任务3 - 执行步骤 " + i);
            }
        });

        // 关闭线程池
        executorService.shutdown();

        try {
            // 等待所有任务执行完毕或者超时（这里设置超时为10秒）
            if (!executorService.awaitTermination(10, TimeUnit.SECONDS)) {
                // 如果在超时时间内任务没有执行完毕，可以选择进行额外处理
                System.out.println("等待超时，可能有任务未完成");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("所有任务已经完成，程序退出。");
    }
}
